# 导入ReadConfigFile类，用于读取配置文件
from read_config_file.ReadConfigFile import ReadConfigFile
# 导入UploadReport类，用于上传报告
from upload_report.upload_report import UploadReport
# 导入SendingEmails类，用于发送邮件
from sending_emails.SendingEmails import SendingEmails
# 导入pytest库，用于运行测试用例
import pytest
# 导入time库，用于延时操作
import time
# 导入os库，用于执行系统命令
import os

# 主程序入口
if __name__ == '__main__':
    # 实例化ReadConfigFile类，用于读取配置文件
    read_config_file = ReadConfigFile('../config_file/config_file.ini')
    # #从配置文件中读取上传报告的相关配置，实例化UploadReport类
    upload_report = UploadReport(
        read_config_file.read_config_file('upload_report', 'ip'),  # 获取上传报告的ip地址
        int(read_config_file.read_config_file('upload_report', 'port')), # 获取上传报告的端口号
        read_config_file.read_config_file('upload_report', 'username'),  # 获取上传报告的用户名
        read_config_file.read_config_file('upload_report', 'password')  # 获取上传报告的密码
    )
    # #从配置文件中读取发送邮件的相关配置，实例化SendingEmails类
    sending_emails = SendingEmails(
        read_config_file.read_config_file('sending_emails', 'from_addr'), # 获取发送邮件的from地址
        read_config_file.read_config_file('sending_emails', 'to_addr'), # 获取发送邮件的to地址
        read_config_file.read_config_file('sending_emails', 'smtp_server'), # 获取发送邮件的smtp服务器地址
        int(read_config_file.read_config_file('sending_emails', 'smtp_port')), # 获取发送邮件的smtp服务器端口号
        read_config_file.read_config_file('sending_emails', 'password')   # 获取发送邮件的密码
    )
    # #使用pytest运行测试用例，并指定输出报告的目录
    pytest.main(['-vs','--alluredir=../report/json_report','../testcases/test_calc.py'])
    # #生成测试报告
    os.system('allure generate ../report/json_report -o ../report/syc --clean')
    # #等待一段时间，确保报告生成完成
    time.sleep(10)
    # 上传生成的测试报告
    upload_report.upload_file_path('../report/syc',
                                   read_config_file.read_config_file('upload_report','upload_report'))
    # # 再次等待一段时间，确保上传完成
    time.sleep(10)
    # #设置邮件主题
    subject = '计算器测试报告'
    # 设置邮件内容，包含测试报告的链接
    # 构建HTML内容，用于邮件正文
    # 使用f-string可以更清晰地插入变量，这里将配置文件中读取的测试报告链接插入到HTML的a标签中
    content = f"""
            <html>
            <body>
                <h2>
                    <a href={read_config_file.read_config_file('sending_emails', 'browse_report_url')}>测试用例已执行，请点击查看测试报告</a>
                </h2>
            </body>
            </html>
            """
    # 注意：read_config_file.read_config_file('sending_emails', 'browse_report_url') 这一行代码会从配置文件中读取测试报告的浏览URL

    # 发送包含测试报告链接的邮件
    sending_emails.send_html_email(subject, content)


